#ifndef MCVCOMMON_H
#define MCVCOMMON_H

#include <string>

namespace MCV
{

typedef int mcvint;
typedef float mcvfloat;
typedef unsigned char mcvuchar;

#define MCVINT 0
#define MCVFLOAT 1
#define MCVUCHAR 2
#define MCVSTRING 3
#define MCVARRAY 4
#define MCVGENERIC 5

class Array;

class MemoryManager
{
public:
	virtual Array* add(Array* rhs);
	virtual void remove(Array* rhs);
};

inline int raw_type_id(mcvfloat& v)
{
	return MCVFLOAT;
}

inline int raw_type_id(mcvint& v)
{
	return MCVINT;
}

inline int raw_type_id(mcvuchar& v)
{
	return MCVUCHAR;
}

inline int raw_type_id(std::string& v)
{
	return MCVSTRING;
}

inline int raw_type_id(Array* v)
{
	return MCVARRAY;
}

inline int type_id(mcvfloat& v)
{
	return MCVFLOAT;
}

inline int type_id(mcvint& v)
{
	return MCVINT;
}

inline int type_id(mcvuchar& v)
{
	return MCVUCHAR;
}

inline int type_id(std::string& v)
{
	return MCVSTRING;
}

inline int type_id(Array* v)
{
	return MCVARRAY;
}


}

#endif